const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const merge = require('webpack-merge');

const commonConfig = require('./webpack.common.config.js');

const prodConfig = {
  entry: {
    app: [
      path.join(__dirname, 'src/app.js'),
    ],
  },
  output: {
    path: path.resolve(__dirname, 'build/dist'),    // 将文件打包到此目录下
    publicPath: 'dist/',                           // 在生成的html中，文件的引入路径会相对于此地址，生成的css中，以及各类图片的URL都会相对于此地址
    filename: '[name].[hash:6].js',
    chunkFilename: '[name].[hash:6].chunk.js',
  },
  module: {
    loaders: [
      // {
      //   test: /\.scss$/,
      //   // css-loader使你能够使用类似@import 和 url(...)的方法实现 require()的功能；
      //   // style-loader将所有的计算后的样式加入页面中
      //   // postcss-loader让你支持使用postcss，postcss用js来解析css成ast(抽象语法树)，它的插件可以处理很多你不必处理的乏味工要。需要配置postcssrc.js|.json|.yaml
      //   use: ExtractTextPlugin.extract({
      //     fallback: 'style-loader',
      //     use: ['css-loader', 'postcss-loader', 'sass-loader']
      //   })
      // }
    ]
  },
  plugins: [
    // 许多library将通过与 process.env.NODE_ENV 环境变量关联，以决定 library 中应该引用哪些内容
    // 该插件帮助我们安心地使用环境变量
    new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': 'production',
      },
    }),
    new CleanWebpackPlugin(['dist/*.*']),

    new UglifyJSPlugin(),
    // 抽取css样式生成文件
    new ExtractTextPlugin({
      filename: '[name].[contenthash:5].css',
      allChunks: true,
    }),
  ],
  devtool: 'cheap-module-source-map' // 更轻量的sourcemap
}

module.exports = merge(commonConfig, prodConfig)
